package main
import (
	"fmt"
)

func main() {
	// 演示一下管道的使用
	// 1. 创建一个存放3个int 类型的管道
	var intChan chan int 
	intChan = make(chan int ,3 )

	// 2. 看看intChan 是什么
	// intChan 的值=0xc00001a100-->指向管道的地址 intChan本身的地址=0xc000006028
	fmt.Printf("intChan 的值=%v intChan本身的地址=%p\n",intChan,&intChan) 

	// 3 . 先管道写入数据
	intChan <-10 // 数据流入管道 ，先管道写入数据
	num :=211
	intChan <-num
	intChan<-50
	//intChan 的值=0xc00001a100 intChan本身的地址=0xc000006028
	// intChan <-98 // 我们给管道写入数据时，不能超过其容量,管道的容量不能动态增长

	// 4 看看管道的长度和cap(容量)
	// cap的值同make 时的值相同
	fmt.Printf("channel len=%v cap =%v\n",len(intChan),cap(intChan)) // 3,3

	// 5从管道中读取数据
	var num2 int
	num2=<- intChan // 10
	fmt.Println("num2=",num2)
	fmt.Printf("channel len=%v cap =%v\n",len(intChan),cap(intChan)) // 2,3

	// 6. 在没有使用协程的情况，
	// 如果我们的管道数据已经全部取出，再取就会报告 deadlock

	num3:= <- intChan
	num4:= <- intChan
	num5 := <- intChan
	fmt.Println("num3=",num3,"num4=",num4,"num5=",num5)
}